<?php

namespace App\Http\Controllers\Car;

use App\Http\Controllers\Controller;
use App\Models\CarModels\CarKind;
use http\Env\Response;
use Illuminate\Http\Request;
use App\Models\CarModels\CarArea;
use Illuminate\Database\QueryException;
use Validator;

/**
 * @group 运营管理->车辆基础信息管理->区域信息
 *
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 * Query Parameters 表示返回参数的名称
 */
class CarAreaController extends Controller
{
    /**
     * 区域信息查看所有
     *
     * @queryParam  name 车辆所属区的名称
     */
    public function index(Request $request){
        return response()->json(encodeMsg(pageQuery(new CarArea(),$request),200),200);
    }
    /**
     * 区域信息查看
     *
     */
    public function area(){
        $query=CarArea::with('car')->get()->toArray();  //查询区域下所有车辆
        foreach ($query as $k=>$v){  //一个区域下车辆
            $row=array();
            foreach ($v['car'] as $v1){
                $row=array_merge_recursive($row,array($v1['kind']['id']));
            }
            unset($query[$k]['car']);
            $query[$k]['kind']=array();
            $row=array_unique($row);  //统计所有kind
            foreach ($row as $v2){
                $data=CarKind::with('components')->find($v2)->toArray();
                foreach ($data['components'] as $k3=>$v3){
                    foreach ($v3['info'] as $k4=>$v4){
                        if ($v4['areas_id']!=$v['id']){
                        unset($data['components'][$k3]['info'][$k4]);
                    }
                    }
                    if ($data['components'][$k3]['info']==[])
                        unset($data['components'][$k3]);
                }
                array_push($query[$k]['kind'],$data);
            }
        }
        return response()->json(encodeMsg($query,200),200);
    }
    /**
     * 车辆所属区信息添加
     *
     * @bodyParam name string optional 区域名称
     *
     * @queryParam  name 车辆所属区的名称
     * @queryParam  city_id 区域所属城市
     *
     */
    public function store(Request $request){
        try{

            $e = genValidate();
            $validator = Validator::make($request->all(),$e);
            if($validator->fails()){
                return response()->json(encodeMsg($validator->errors()->messages(),400),400);
            }
            $data=CarArea::create($request->all());
            return response()->json(encodeMsg($data,201),201);
        }catch (QueryException $e){
            return response()->json(encodeMsg(["message"=>"名字重复"],400),400);
        }
    }

    /**
     * 车辆所属区信息显示(单个信息显示)
     *
     * @queryParam  name 车辆所属区的名称
     * @queryParam  city_id 区域所属城市
     *
     */
    public function show($pk){
        $data = CarArea::with('city')->find($pk);
        if($data == []){
            return response()->json(encodeMsg(["message"=>"没有该车辆所属区信息"],404),404);
        }else{
            return response()->json(encodeMsg($data,200),200);
        }
    }

    /**
     * 车辆所属区信息修改
     *
     * @bodyParam name string optional  车辆所属区的名称
     * @bodyParam city_id int optional  区域所属城市 外键
     *
     * @queryParam  city_id 区域所属城市
     * @queryParam  name 车辆所属区的名称
     *
     */
    public function update(Request $request, $pk){
        $e = genValidate();
        $validator = Validator::make($request->all(),$e);
        if($validator->fails()){
            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
        }
        $carkind = CarArea::find($pk);
        if($carkind == []){
            return response()->json(encodeMsg(["message"=>"没有该车辆所属区信息"],404),404);
        }
        try {
            $carkind->update($request->all());
            return response()->json(encodeMsg($carkind,200), 200);
        }catch (QueryException $e){
            return response()->json(encodeMsg(["message"=>"所属城市不存在"],400),400);
        }
    }

    /**
     * 车辆所属区信息删除
     */

    public function destroy($pk){
        $data = CarArea::find($pk);
        if($data == []){
            return response()->json(encodeMsg(["message"=>"没有该车辆所属区信息"],404),404);
        }
        $data->delete();
        return response()->json(encodeMsg(["message"=>"删除成功"],204),200);
    }
}
